///////////////////////////////////////////////////////////////////////////////
///
/// Cylan Client Core
/// Copyright (C) Shenzhen Cylan Tech. Co., Ltd. 2012
///
/// @file       TCP_TUNNELSRes.h
/// @brief      TCP_TUNNELS  API
///
///////////////////////////////////////////////////////////////////////////////
#ifndef CYLAN_TCP_TUNNELSRES_H
#define CYLAN_TCP_TUNNELSRES_H

#ifdef __cplusplus
extern "C" {
#endif

#include "Core/Core.h"

/**
 * @struct TCP_TUNNELS_IP_ADDR_TYPE
 * @brief IP资源类型
 */
typedef enum TCP_TUNNELS_IP_ADDR_TYPE
{
    IP_IPORDOMAINNAME,
    IP_RANGE,
    TP_SUBNET
} TCP_TUNNELS_IP_ADDR_TYPE;

/**
 * @struct TCP_TUNNELS_PORT_TYPE
 * @brief TCP端口类型
 */
typedef enum TCP_TUNNELS_PORT_TYPE
{
	TCP_SINGLE_PORT,
	TCP_RANGE_PORT,
	TCP_SUBNET_PORT
} TCP_TUNNELS_PORT_TYPE;

/**
 * @struct TCP_TUNNELS_RESOURCE
 * @brief TCP_TUNNELS资源信息
 */
typedef struct TCP_TUNNELS_RESOURCE
{
    int ID;                         ///< TCP_TUNNELS资源ID
    const char* Name;               ///< TCP_TUNNELS资源名称
    const char* Desc;               ///< TCP_TUNNELS资源描述
    const char* Icon;               ///< TCP_TUNNELS图标地址
    char Addr[CC_MAX_URL];
    const char* szBeginAddr;
    const char* szEndAddr;
    const char* Port;
    const unsigned short *iPortArray;
    const char* Uri;                ///< TCP_TUNNELS链接地址
    int  IconCreateTime;            ///< 图标创建时间
    const char *ViewGroup;          ///< TCP_TUNNELS资源所属组
    int  Weight;                    ///< TCP_TUNNNELS资源排序
    int  PortArrayLen;
    const char* Protocol;           ///< protocol为http的对应于tcp web资源
    TCP_TUNNELS_IP_ADDR_TYPE  Addr_Type;                 ///< 地址类型
    TCP_TUNNELS_PORT_TYPE Port_Type;                     ///< 端口类型
    int  isHide;                    ///< TCP_TUNNNELS资源是否隐藏,0不隐藏,1隐藏，独立客户端
	int  hidden_mobile;              ///< TCP_TUNNNELS资源是否隐藏,0不隐藏,1隐藏，移动客户端
	int Popup;
    const char *FtpUsername;
    const char *FtpPassword;
} TCP_TUNNELS_RESOURCE;

/**
 * @fn int TCP_TUNNELSResourceCount(const CHANDLE Session)
 * @brief 返回会话可用的TCP_TUNNELS资源个数
 * @param Session 已登陆的Session句柄
 * @return 可用的TCP_TUNNELS资源量
 */
int TcpTunnelsResourceCount(const CHANDLE Session);

/**
 * @fn CC_STATUS TCP_TUNNELSResourceInfo(const CHANDLE Session, int Index, TCP_TUNNELS_RESOURCE *Resource, int *Size)
 * @brief 获取TCP_TUNNELS资源信息
 * @param Session 已登陆的Session句柄
 * @param Index 资源索引
 * @param Resource 调用者提供的缓冲区以保存资源信息
 * @param Size Resource参数的缓冲区大小. 如果提供的缓冲区太小, 会返回所需的缓冲区大小字节数.
 * @return TCP_TUNNELS资源信息
 * @retval ERR_SUCCESS 成功
 * @retval ERR_NOT_FOUND 资源索引超出可用资源个数范围
 * @retval ERR_BUFFER_TOO_SMALL 提供的Resource缓冲区太小
 */
CC_STATUS TcpTunnelsResourceInfo(const CHANDLE Session, int Index, TCP_TUNNELS_RESOURCE *Resource, int *Size);

#ifdef __cplusplus
}
#endif

#endif /* CYLAN_TCP_TUNNELSRES_H */
